llama.cpp 是個相當受歡迎的語言模型推論框架,但一些相關的環境配置、編譯手法稍微困難一點,若不是有點技術底,一開始玩起來是頗痛苦。
好在後來作者都會定期釋出編譯好而且跨平台的執行檔,加上免費仔最愛的 Colab 可以無痛使用預先建立好的開發環境,今天就來嘗試用 Colab 產生並量化一個 llama.cpp 可用的 Llama 3.1 8B 模型。
本文操作皆放在此 Colab Demo 裡面供各位參考!
若要使用 Llama 3.1 模型,需要先去官方的 HF Hub 上面填表單取得存取權限:
過一段時間,就會收到 "[Access granted]" 的 Email 通知你可以存取了,接下來點擊右上角的頭像前往 Settings 設定:
到 Access Tokens 分頁點 Create new token 按鈕:
因為我們只是要下載模型,所以 Token type 選擇 Read 即可:
幫 Token 取個名稱,點擊 Create token 後把 Token 複製下來。
在使用 Colab 操作 llama.cpp 之前,需要先做一些前置準備:
transformers
升級至最新版。操作如下:
!pip install transformers -U
!git clone https://github.com/ggerganov/llama.cpp --depth 1
!wget https://github.com/ggerganov/llama.cpp/releases/download/b3452/llama-b3452-bin-ubuntu-x64.zip
!unzip llama-b3452-bin-ubuntu-x64.zip
透過 !huggingface-cli login
登入,在以下方框內輸入剛剛建立的 Access Token 進去:
我一開始找那個方框找超久的 🧐
接著下載模型:
!huggingface-cli download meta-llama/Meta-Llama-3.1-8B-Instruct --local-dir llama3.1-8b-inst --exclude 'original/**'
下載完的模型會存在 llama3.1-8b-inst
資料夾底下,因為官方有額外放一份這裡用不到的原始權重,所以加上 --exclude 'original/**'
跳過那些檔案,減少網路傳輸時間。
透過 convert_hf_to_gguf.py
這個程式將模型轉換為 .gguf
格式:
!python /content/llama.cpp/convert_hf_to_gguf.py --outtype f16 --outfile model.f16.gguf llama3.1-8b-inst
受限於 Colab 免費版的機器規格,光這步轉換就要花上五分鐘左右 🤔
這一步產生的 model.f16.gguf
其實已經能夠用 llama.cpp 來執行了,但是因為 Colab 無論是 CPU 還是 GPU 的 RAM 都太少了,所以會跑不起來或跑很慢,因此將模型進一步量化至 8 位元或 4 位元:
!./build/bin/llama-quantize model.f16.gguf model.q4km.gguf Q4_K_M # 4-Bit
# !./build/bin/llama-quantize model.f16.gguf model.q8.gguf Q8_0 # 8-Bit
這步量化也是要超久 der 大概 15 ~ 20 分鐘左右 😴
可以先在 Colab 裡面實際執行看看:
!/content/build/bin/llama-cli -m /content/model.q4km.gguf -p "alan turing was an" -c 128 -n 16
-c 128
會將模型的 Context Window 限制在 128 Tokens 以內,用以減少記憶體的用量,-n 16
代表只生成 16 個 Tokens。程式跑起來一段時間之後,就會看到 "alan turing was an english mathematician and computer scientist..." 這樣就代表成功啦!
接著我們可以把模型下載到自己的電腦裡面,試著在自己的電腦上跑跑看:
4-Bit 的模型大小約 4.5 GB 因此也是需要花上一點時間等他下載,等待期間可以先去下載 Windows 版的 llama.cpp 執行檔,在 Releases 頁面可以看到許多 Assets 可以下載。如果你有 NVIDIA GPU 可以下載 bin-win-cuda-cu12.2.0-x64.zip
,如果你的電腦沒有裝 CUDA 需要另外下載 cudart-llama-bin-win-cu12.2.0-x64.zip
,如果只想用 CPU 跑的話,下載 bin-win-avx-x64.zip
或 win-avx2-x64.zip
即可。
GPU 版的部份,需要將 cudart-llama-bin-win-cu12.2.0-x64.zip
解壓縮出來的三個 .dll
檔放在工作目錄底下,然後右鍵選擇「在終端中開啟」:
執行時需要加上 -ngl 99
來把模型放進 GPU 裡面,因為有了 GPU 加持,所以一些參數都可以開大一點:
.\llama-b3452-bin-win-cuda-cu12.2.0-x64\llama-cli.exe -m .\model.q4km.gguf -p "alan turing was an" -c 8192 -ngl 99 -n 4096
然後開始享受 GPU 散熱風扇飆速運作的快感 🚀🚀🚀
可以搭配 -cnv -i
啟用聊天模式,搭配 -p
指定系統提示:
.\llama-b3452-bin-win-cuda-cu12.2.0-x64\llama-cli.exe -m .\model.q4km.gguf -p "Reply in Traditional Chinese." -c 8192 -ngl 99 -cnv -i
用起來大概會像這樣:
== Running in interactive mode. ==
- Press Ctrl+C to interject at any time.
- Press Return to return control to the AI.
- To return control without starting a new line, end your input with '/'.
- If you want to submit another line, end your input with '\'.
system
Reply in Traditional Chinese.
> 你好啊!
您好!
> 什麼是語言模型?
語言模型是一種用於生成和理解自然語言的計算模型。它通過學習大型語料庫的語言模式和規律來了解語言的結構和特徵。語言模型可以用於文本生成、語言翻譯、語意分析等方面的應用。
如果你懶得自己轉格式做量化,可以到 HF Hub 上面下載別人轉換好的權重。如果你根本也懶得打指令,那其實可以用 LM Studio 來跑模型!LM Studio 提供美觀且直觀的操作畫面,任何人都可以輕鬆遊玩各式各樣的 LLM 🤗
《LLM 大型語言模型的絕世祕笈:27 路獨步劍法,帶你闖蕩生成式 AI 的五湖四海》改編自我參加 2023 年第 15 屆 iThome 鐵人賽 AI & Data 組冠軍系列文章《LLM 學習筆記》,介紹了許多在建立 LLM 相關應用時會使用到的技術。本書預計於 8/9 上市,現在可以在天瓏網路書局上預購,連結請參考留言區,還請大家多多支持!